import hashlib
import json

from django.http import JsonResponse, HttpResponse
from django.views import View
from .models import Register
import re


class LoginView(View):
    """员工登录"""

    def get(self, request):
        return HttpResponse('-LoginView的get方法-')

    def post(self, request):
        """
        获取前端提交的信息
        :param request:获取数据
        :return: 响应前端信息,错误提示30？
        """
        # 获取json串
        json_str = request.body
        # 将字符串反序列化为对象
        py_obj = json.loads(json_str)
        # 获取每一个数据
        emp_id = py_obj['username']
        emp_password = py_obj['password']
        print(emp_password, emp_id)
        # 根据输入信息获取存储信息
        try:
            emp = Register.objects.get(username=emp_id)


        except Exception as e:
            print('the error is %s' % e)
            result = {'code': 301, 'error': '账号或密码错误!'}
            return JsonResponse(result)
        # 密码加密
        md5 = hashlib.md5()
        md5.update(emp_password.encode())
        password = md5.hexdigest()
        # 判断输入密码是否与数据库密码相同，不同提示错误
        if password != emp.password:
            result = {'code': 302, 'error': '用户名或密码错误!'}
            return JsonResponse(result)
        return JsonResponse({'code': 200})


class RegisterView(View):
    def get(self,request):
        return HttpResponse('--RegisterView的用法')

    def post(self, request):
        """
        用户注册
        :param request: 前端获取的json字符串
        :return: 错误信息,正确返回200并存入数据库,错误提示40？
        """
        # 获取json字符串
        json_str = request.body
        # 将json字符串反序列化为对象
        py_obj = json.loads(json_str)
        # 获取每一个元素
        username = py_obj['username']
        password_1 = py_obj['password_1']
        password_2 = py_obj['password_2']
        phone = py_obj['phone']
        print(username,password_1,phone)
        # 如果用户名称为空提示错误
        if not username:
            result = {'code': 401, 'error': '用户名称为空!'}
            return JsonResponse(result)
        # 判断两次密码是否一致
        if password_1 != password_2:
            result = {'code': 402, 'error': '两次密码不一致!'}
            return JsonResponse(result)
        # 判断手机号是否合法
        try:
            ph = '^1[3-9]{10}$'
            phone = phone
            result = re.match(ph, phone)
            result.group()
        except:
            result = {'code': 403, 'error': '请输入正确手机号!'}
            return JsonResponse(result)
        # 用md5加密用户密码
        md5 = hashlib.md5()
        md5.update(password_1.encode())
        password = md5.hexdigest()
        # 试着存入数据库,如果员工名称存在报错
        try:
            Register.objects.create(username=username, password=password, phone=phone)

        except:
            result = {'code': 404, 'error': '用户名称已存在'}
            return JsonResponse(result)
        # 以上正确会响应前端正确信息及跳转页面
        return JsonResponse({'code': 200})

class ForgetView(View):
    def get(self,request):
        return HttpResponse('ForgetView的用法')
    def put(self,request):
        """
        忘记并修改密码
        :param request: 前端json数据
        :return: 正确更新密码到数据库,错误提示错误信息50?
        """
        # 获json对象
        json_str = request.body
        # 将json字符串反序列化为对象
        py_obj = json.loads(json_str)
        # 获取每一个元素
        username = py_obj['username']
        password_1 = py_obj['password_1']
        password_2 = py_obj['password_2']
        # 用户名不能为空,报错
        if not username:
            result = {'code': 501, 'error': '用户名不能为空'}
            return JsonResponse(result)
        # 判断两次输入的密码是否一致
        if password_1 != password_2:
            result = {'code': 502, 'error': '两次密码不一致'}
            return JsonResponse(result)
        # 将用户修改的密码用加密
        md5 = hashlib.md5()
        md5.update(password_1.encode())
        password = md5.hexdigest()
        # 加密后更新保存到数据库
        Register.objects.filter(username=username).update(password=password)
